package campus.aiit.ssl.manage.modbus.provider;

/**
 * @author ihaokun
 * @date 2019/12/17 18:36
 */
public class Provider {
  public static class Constants {
    /** Function Code(1 byte) + Data(n bytes) */
    public enum PDUs {
      //Read instructions
      TEMPERATURE("03 00 01 00 01"), // 温度：℃
      HUMIDITY("03 00 06 00 01"), // 湿度
      VOLTS("03 00 0D 00 01"),  //电压volts；V
      AMPERES("03 00 10 00 01"),  //电流amperes；mA
      ELECTRIC_CONSUME("03 01 4D 00 02"), //总用电量；kw.h
      // status(0 OFF, 1 ON)
      AUTO_STATUS("03 01 2C 00 01"), // 自控状态
      ZIGBEE_STATUS("86 00 8F 00 01"),//zigbeb状态
      ZIGBEE_STATUS_FS("86 00 8F 00 02"),//风扇状态
      RELAY_STATUS("03 01 4B 00 01"), // 继电器状态
        ON_OFF_STATUS("03 00 19 00 01"), // 空调启停状态
      BUZZER_STATUS("03 01 30 00 01"), // 蜂鸣器状态
      MODE("03 01 2D 00 01"), //冬夏季模式：1冬季；0夏季

      //Write instructions
      ON_AUTO("06 01 2C 00 01"),  //开启自控
      OFF_AUTO("06 01 2C 00 00"), //关闭自控
      ON_RELAY("06 01 4B 00 01"),  //开启继电器
      OFF_RELAY("06 01 4B 00 00"),  //关闭继电器


      // strategy about(timed instructions)
      // 目前需求为一周内某一天只写一个时间段，故 Quantity of Register & Byte Count 两部分是固定的
      // 后续需求有变化，两个字段可以修改，如 周一10个时间段可以是01 f5 00 46 8c
      MONDAY("10 01 01 00 07 0E"),  // 周一_1(01 F5寄存器地址，表示周几第一个时间段)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      TUESDAY("10 02 01 00 07 0E"),  // 周二_1(02 3B寄存器地址)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      WEDNESDAY("10 03 01 00 07 0E"),  // 周三_1(02 81寄存器地址)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      THURSDAY("10 04 01 00 07 0E"),  // 周四_1(02 C7寄存器地址)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      FRIDAY("10 05 01 00 07 0E"),  // 周五_1(03 0D寄存器地址)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      SATURDAY("10 06 01 00 07 0E"),  //周六_1(03 53寄存器地址)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      SUNDAY("10 07 01 00 07 0E"),  //周日_1(03 99寄存器地址)；单个时间段(00 07寄存器数量, 0E 后续字节数)
      RESERVE_BYTES("01 01"),  //预留的两个字节
      HUMAN_INFRARED("04"), // 人体红外：04 不判断有无人
      DEVICE_CONTROL_MODE("04");  //设备控制模式：01 自动开关 04 直接断电

      private String hex;
      public String getHex() {
        return hex;
      }

      PDUs(String hex) {
        this.hex = hex;
      }

      @Override
      public String toString() {
        return this.hex;
      }
    }
  }
}